package com.chenxu.gmall.realtime.app.func;

import com.chenxu.gmall.realtime.utils.KeywordUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

import java.util.List;

/**
 * Date: 2021/07/19
 * Desc:  自定义UDTF函数实现分词操作
 */
/*
@FunctionHint(output = @DataTypeHint("ROW<s STRING, i INT>"))
public static class OverloadedFunction extends TableFunction<Row> {

  public void eval(int a, int b) {
    collect(Row.of("Sum", a + b));
  }

  // overloading of arguments is still possible
  public void eval() {
    collect(Row.of("Empty args", -1));
  }
}
//@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))指定的就是输出的类型；
//// 解耦类型推导与求值方法，类型推导完全取决于 FunctionHint
//@FunctionHint(
//  input = {@DataTypeHint("INT"), @DataTypeHint("INT")},
//  output = @DataTypeHint("INT")
//)
 */
    //选用TableFunction的目的是因为TableFunction可以返回任意数量的行；
@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))
public class KeywordUDTF extends TableFunction<Row> {
    //这里的value就是搜索时候输入的值；
    public void eval(String value) {
        //使用工具类对字符串进行分词
        List<String> keywordList = KeywordUtil.analyze(value);
        for (String keyword : keywordList) {
            //下面这两张写法效果相同；每个keyWord作为一行输出；
            //collect(Row.of(keyword));
            Row row = new Row(1);//一列；
            row.setField(0,keyword);
            collect(row);
        }
    }
}
